package vip.george.p1232;

public class P1232 {


    /**
     * 使用斜率来判断（但是不能计算具体的斜率值，因为斜率可能不存在或者斜率为小数导致精度问题）
     * 使用两点式方程来判断: (y - y1)/(x - x1) = (y2 - y1)/(x2 - x1)。为了避免除法，使用交叉乘法： (y - y1) * (x2 - x1) = (y2 - y1) * (x - x1)
     * @param coordinates
     * @return
     */
    public boolean checkStraightLine(int[][] coordinates) {
        int len = coordinates.length;
        if (len <= 2) {
            return true;
        }
        int x1 = coordinates[0][0];
        int y1 = coordinates[0][1];
        int x2 = coordinates[1][0];
        int y2 = coordinates[1][1];
        //从第3个点开始，判断该点是否在直线上（带入直线方程即可）
        for (int i = 2; i < len; i++) {
            int x = coordinates[i][0];
            int y = coordinates[i][1];
            if ((y - y1) * (x2 - x1) != (y2 - y1) * (x - x1)) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        P1232 p1232 = new P1232();
        System.out.println(p1232.checkStraightLine(new int[][] {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7}}));
        System.out.println(p1232.checkStraightLine(new int[][] {{1,1},{2,2},{3,4},{4,5}}));
        System.out.println(p1232.checkStraightLine(new int[][] {{1,1},{2,2},{2,0}}));
        System.out.println(p1232.checkStraightLine(new int[][] {{0,1},{0,2},{0,3},{0,4},{0,5}}));
        System.out.println(p1232.checkStraightLine(new int[][] {{1,0},{2,0},{3,0},{4,0},{5,0}}));
    }
}
